package com.nwpu.am.service.impl;

import com.nwpu.am.constant.properties.SnowflakeProperties;
import com.nwpu.am.mapper.*;
import com.nwpu.am.pojo.dto.PurchaseItemDTO;
import com.nwpu.am.pojo.entity.*;
import com.nwpu.am.service.PurchaseItemService;
import com.nwpu.am.utils.id_generator.IdGenerator;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Map;

/**
 * PurchaseItemServiceImpl
 *
 * @author Du
 * @version 1.0
 * {@code @date} 2024/6/
 */
@Service
@Slf4j
public class PurchaseItemServiceImpl implements PurchaseItemService {
    @Resource
    private PartMapper partMapper;
    @Resource
    private PurchaseMapper purchaseMapper;
    @Resource
    private PurchaseItemPartMapper purchaseItemPartMapper;
    @Resource
    private SupplierMapper supplierMapper;
    @Resource
    private UserMapper userMapper;
    @Resource
    private SnowflakeProperties snowflakeProperties;
    @Resource
    private IdGenerator idGenerator;
    @Override
    public PurchaseItem submitPurchase(PurchaseItemDTO purchaseItemDTO) {
        User user = userMapper.findByUsername(purchaseItemDTO.getUserName());
        if (user == null){
            return null;
        }

        Supplier supplier = supplierMapper.selectSupplierByName(purchaseItemDTO.getSupplierName());
        if (supplier == null){
            return null;
        }
        //添加purchaseItem
        idGenerator.init(snowflakeProperties.getWorkId(), snowflakeProperties.getDataCenterId());
        long purchaseItemId = idGenerator.nextId();
        PurchaseItem purchaseItem = new PurchaseItem(purchaseItemId,user.getUserId(),supplier.getSupplierId(),
                purchaseItemDTO.getPurchaseStartTime(),purchaseItemDTO.getPurchaseEndTime(),purchaseItemDTO.getStatus());
        purchaseMapper.insertPurchase(purchaseItem);

        //添加purchaseItemPart
        Map<String,Integer> parts = purchaseItemDTO.getParts();
        for (Map.Entry<String, Integer> entry : parts.entrySet()) {
            String partName = entry.getKey();
            Integer partNum = entry.getValue();
            ArrayList<Part> partList = partMapper.selectPartByName(partName);
            long partId = partList.get(0).getPartId();

            long purchaseItemPartId = idGenerator.nextId();
            PurchaseItemPart purchaseItemPart = new PurchaseItemPart(purchaseItemPartId,purchaseItemId,partId,partNum);

            purchaseItemPartMapper.insertPurchaseItemPart(purchaseItemPart);
        }

        return purchaseItem;
    }
}
